package com.zzyl.nursing.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zzyl.nursing.vo.QueryDeviceDataListCountVo;
import org.apache.ibatis.annotations.Mapper;

import java.time.LocalDateTime;
import java.util.List;
import com.zzyl.nursing.domain.Device;
import org.apache.ibatis.annotations.Param;

/**
 * IoT设备管理Mapper接口
 * 
 * @author laoYe
 * @date 2025-10-28
 */
@Mapper
public interface DeviceMapper extends BaseMapper<Device> {
    /**
     * 查询IoT设备管理
     * 
     * @param id IoT设备管理主键
     * @return IoT设备管理
     */
    Device selectDeviceById(Long id);

    /**
     * 查询IoT设备管理列表
     * 
     * @param device IoT设备管理
     * @return IoT设备管理集合
     */
    List<Device> selectDeviceList(Device device);

    /**
     * 新增IoT设备管理
     * 
     * @param device IoT设备管理
     * @return 结果
     */
    int insertDevice(Device device);

    /**
     * 修改IoT设备管理
     * 
     * @param device IoT设备管理
     * @return 结果
     */
    int updateDevice(Device device);

    /**
     * 删除IoT设备管理
     * 
     * @param id IoT设备管理主键
     * @return 结果
     */
    int deleteDeviceById(Long id);

    /**
     * 批量删除IoT设备管理
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteDeviceByIds(Long[] ids);

    /**
     * 通过随身设备iotId查询老人的护理人员
     * 设备iotId(device表: binding_location=老的id)
     * @param iotId
     * @return
     */
    List<Long> selectNursingIdsByIotIdWithElder(String iotId);

    /**
     * 通过固定设备iotId查询床位上的老的护理人员
     * iotId(device.binding_location=床位id, 老人elder.bed_id 找到老人的id, 找到护理人员id)
     * @param iotId
     * @return
     */
    List<Long> selectNursingIdsByIotIdWithBed(String iotId);

    /**
     * 通过设备iotId查询设备数据列表
     * @param iotId
     * @param functionId
     * @param startTime
     * @param endTime
     * @return
     */
    List<QueryDeviceDataListCountVo> selectDeviceDataListByDay(@Param("iotId") String iotId, @Param("functionId") String functionId,@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);

    /**
     * 通过设备iotId查询设备数据列表
     * @param iotId
     * @param functionId
     * @param startTime
     * @param endTime
     * @return
     */
    List<QueryDeviceDataListCountVo> selectDeviceDataListByWeek(@Param("iotId") String iotId, @Param("functionId") String functionId,@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
}
